home *** CD-ROM | disk | FTP | other *** search
/ Risc World 5 / Risc World 5.iso / SOFTWARE / Issue3 / Games / xrick / !xrick / src / c / devtools < prev    next >
Text File  |  2004-06-24  |  6KB  |  247 lines

  1. /*
  2.  * xrick/src/scr_devtools.c
  3.  *
  4.  * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). All rights reserved.
  5.  *
  6.  * The use and distribution terms for this software are contained in the file
  7.  * named README, which can be found in the root of this distribution. By
  8.  * using this software in any fashion, you are agreeing to be bound by the
  9.  * terms of this license.
  10.  *
  11.  * You must not remove this notice, or any other, from this software.
  12.  */
  13.  
  14. #include "config.h"
  15.  
  16. #ifdef ENABLE_DEVTOOLS
  17.  
  18. #include "system.h"
  19. #include "game.h"
  20.  
  21. #include "control.h"
  22. #include "screens.h"
  23. #include "draw.h"
  24. #include "sprites.h"
  25. #include "maps.h"
  26.  
  27. /*
  28.  * DevTools
  29.  */
  30.  
  31. U8
  32. devtools_run(void)
  33. {
  34.   static U8 seq = 0;
  35.   static U8 pos = 0;
  36.   static U8 pos2 = 0;
  37.   U8 i, j, k, l;
  38.   U8 s[128];
  39.  
  40.   if (seq == 0) {
  41.     sysvid_clear();
  42.     game_rects = &draw_SCREENRECT;
  43. #ifdef GFXPC
  44.     draw_filter = 0xffff;
  45. #endif
  46.     seq = 1;
  47.   }
  48.  
  49.   switch (seq) {
  50.   case 1:  /* draw tiles */
  51.     sysvid_clear();
  52.     draw_tilesBank = 0;
  53.     sprintf(s, "TILES@BANK@%d\376", pos);
  54.     draw_setfb(4, 4);
  55.     draw_tilesListImm(s);
  56.     k = 0;
  57.     for (i = 0; i < 0x10; i++) {
  58.       draw_setfb(80 + i * 0x0a, 14);
  59.       draw_tile((i<10?0x30:'A'-10) + i);
  60.       draw_setfb(64, 30 + i * 0x0a);
  61.       draw_tile((i<10?0x30:'A'-10) + i);
  62.     }
  63.     draw_tilesBank = pos;
  64.     for (i = 0; i < 0x10; i++)
  65.       for (j = 0; j < 0x10; j++) {
  66.     draw_setfb(80 + j * 0x0a, 30 + i * 0x0a);
  67.     draw_tile(k++);
  68.       }
  69.     seq = 10;
  70.     break;
  71.   case 10:  /* wait for key pressed */
  72.     if (control_status & CONTROL_FIRE)
  73.       seq = 98;
  74.     if (control_status & CONTROL_UP)
  75.       seq = 12;
  76.     if (control_status & CONTROL_DOWN)
  77.       seq = 13;
  78.     if (control_status & CONTROL_RIGHT)
  79.       seq = 11;
  80.     break;
  81.   case 11:  /* wait for key released */
  82.     if (!(control_status & CONTROL_RIGHT)) {
  83.       pos = 0;
  84.       seq = 21;
  85.     }
  86.     break;
  87.   case 12:  /* wait for key released */
  88.     if (!(control_status & CONTROL_UP)) {
  89.       if (pos < 4) pos++;
  90.       seq = 1;
  91.     }
  92.     break;
  93.   case 13:  /* wait for key released */
  94.     if (!(control_status & CONTROL_DOWN)) {
  95.       if (pos > 0) pos--;
  96.       seq = 1;
  97.     }
  98.     break;
  99.   case 21:  /* draw sprites */
  100.     sysvid_clear();
  101.     draw_tilesBank = 0;
  102.     sprintf(s, "SPRITES\376");
  103.     draw_setfb(4, 4);
  104.     draw_tilesListImm(s);
  105.     for (i = 0; i < 8; i++) {
  106.       draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 26);
  107.       draw_tile((i<10?0x30:'A'-10) + i);
  108.       draw_setfb(0x08 + 0x20 + i * 0x20, 0x30 - 16);
  109.       draw_tile((i+8<10?0x30:'A'-10) + i+8);
  110.     }
  111.     for (i = 0; i < 4; i++) {
  112.       k = pos + i * 8;
  113.       draw_setfb(0x20 - 16, 0x08 + 0x30 + i * 0x20);
  114.       j = k%16;
  115.       k /= 16;
  116.       draw_tile((j<10?0x30:'A'-10) + j);
  117.       draw_setfb(0x20 - 26, 0x08 + 0x30 + i * 0x20);
  118.       j = k%16;
  119.       draw_tile((j<10?0x30:'A'-10) + j);
  120.     }
  121.     k = pos;
  122.     for (i = 0; i < 4; i++)
  123.       for (j = 0; j < 8; j++) {
  124.       draw_sprite(k++, 0x20 + j * 0x20, 0x30 + i * 0x20);
  125.       }
  126.     seq = 30;
  127.     break;
  128.   case 30:  /* wait for key pressed */
  129.     if (control_status & CONTROL_FIRE)
  130.       seq = 98;
  131.     if (control_status & CONTROL_UP)
  132.       seq = 32;
  133.     if (control_status & CONTROL_DOWN)
  134.       seq = 33;
  135.     if (control_status & CONTROL_LEFT)
  136.       seq = 31;
  137.     if (control_status & CONTROL_RIGHT)
  138.       seq = 40;
  139.     break;
  140.   case 31:  /* wait for key released */
  141.     if (!(control_status & CONTROL_LEFT)) {
  142.       pos = 0;
  143.       seq = 1;
  144.     }
  145.     break;
  146.   case 32:  /* wait for key released */
  147.     if (!(control_status & CONTROL_UP)) {
  148.       if (pos < SPRITES_NBR_SPRITES - 32) pos += 32;
  149.       seq = 21;
  150.     }
  151.     break;
  152.   case 33:  /* wait for key released */
  153.     if (!(control_status & CONTROL_DOWN)) {
  154.       if (pos > 0) pos -= 32;
  155.       seq = 21;
  156.     }
  157.     break;
  158.   case 40:
  159.     sysvid_clear();
  160. #ifdef GFXPC
  161.     if (pos2 == 0) pos2 = 2;
  162. #endif
  163. #ifdef GFXST
  164.     if (pos2 == 0) pos2 = 1;
  165. #endif
  166.     sprintf(s, "BLOCKS@%#04X@TO@%#04X@WITH@BANK@%d\376",
  167.         pos, pos + 4*8-1, pos2);
  168.     draw_setfb(4, 4);
  169.     draw_tilesBank = 0;
  170.     draw_tilesListImm(s);
  171.     draw_tilesBank = pos2;
  172.     for (l = 0; l < 8; l++)
  173.       for (k = 0; k < 4; k++)
  174.     for (i = 0; i < 4; i++)
  175.       for (j = 0; j < 4; j++) {
  176.         draw_setfb(20 + j * 8 + l * 36, 30 + i * 8 + k * 36);
  177.         draw_tile(map_blocks[pos + l + k * 8][i * 4 + j]);
  178.       }
  179.     seq = 41;
  180.     break;
  181.   case 41:
  182.     if (control_status & CONTROL_FIRE)
  183.       seq = 98;
  184.     if (control_status & CONTROL_UP)
  185.       seq = 42;
  186.     if (control_status & CONTROL_DOWN)
  187.       seq = 43;
  188.     if (control_status & CONTROL_LEFT)
  189.       seq = 44;
  190.     if (control_status & CONTROL_PAUSE)
  191.       seq = 45;
  192.     break;
  193.   case 42:
  194.     if (!(control_status & CONTROL_UP)) {
  195.       if (pos < MAP_NBR_BLOCKS - 8*4) pos += 8 * 4;
  196.       seq = 40;
  197.     }
  198.     break;
  199.   case 43:
  200.     if (!(control_status & CONTROL_DOWN)) {
  201.       if (pos > 0) pos -= 8 * 4;
  202.       seq = 40;
  203.     }
  204.     break;
  205.   case 44:
  206.     if (!(control_status & CONTROL_LEFT)) {
  207.       pos = 0;
  208.       pos2 = 0;
  209.       seq = 21;
  210.     }
  211.     break;
  212.   case 45:
  213.     if (!(control_status & CONTROL_PAUSE)) {
  214. #ifdef GFXPC
  215.       if (pos2 == 2) pos2 = 3;
  216.       else pos2 = 2;
  217. #endif
  218. #ifdef GFXST
  219.       if (pos2 == 1) pos2 = 2;
  220.       else pos2 = 1;
  221. #endif
  222.       seq = 40;
  223.     }
  224.     break;
  225.   case 98:  /* wait for key released */
  226.     if (!(control_status & CONTROL_FIRE))
  227.       seq = 99;
  228.     break;
  229.   }
  230.  
  231.   if (control_status & CONTROL_EXIT)  /* check for exit request */
  232.     return SCREEN_EXIT;
  233.  
  234.   if (seq == 99) {  /* we're done */
  235.     sysvid_clear();
  236.     seq = 0;
  237.     return SCREEN_DONE;
  238.   }
  239.  
  240.   return SCREEN_RUNNING;
  241. }
  242.  
  243. #endif /* ENABLE_DEVTOOLS */
  244.  
  245. /* eof */
  246.  
  247.